package core

import (
	"io/ioutil"
	"strconv"
	"strings"
)

/*
 * 该目录文件主要负责生成博客网站功能,功能有:
 * 1. 初始化清空网站目录
 * 2. 网站文件夹目录生成
 * 3. 最终网页文件写入网站目录
 * 4. 静态文件写入
 */

/*
 * 1. 清空网站生成目录
 * @params 博客静态网站所在目录
 */
func initWebPageDir(webDirPath string) {
	list := GetFileByType(webDirPath, FielsAndDirectory)
	for _, v := range list {
		fn := outPath + "/" + v.Name()
		if v.IsDir() {
			RemoveDir(fn)
		} else {
			RemoveFile(fn)
		}
	}
}

/*
 * 2. 初始化网站生成目录内资源目录文件夹
 */
func initStaticDir(op string) {
	ap := op + "/assets"
	CreateDir(ap)
	CreateDir(ap + "/js")
	CreateDir(ap + "/css")
	CreateDir(ap + "/img")
	CreateDir(ap + "/video")
	CreateDir(ap + "/audio")
}

/*
 * 3.1 完成新闻列表页面
 */
func makeNews() {
	pages := make([]string, htmls.Len()/10+1)
	var lists string = ""
	for k, v := range htmls {
		if (k+1)%10 == 0 {
			ul := `<ul page="` + strconv.Itoa((k+1)/10) + `">` + strings.TrimSpace(lists) + `</ul>`
			pages = append(pages, ul)
			lists = ""
		} else {
			lists += `<li><a href=` + v.Router + `><div><title>` + strings.TrimSpace(v.Title) + `</title><time>` + FormatDate(v.Time) + `</time></div><p>` + strings.TrimSpace(v.HF.Description) + `</p></a></li>`
		}
	}
	// 3.分页
	pStr := ""
	for i := 1; i < (htmls.Len()/10 + 1); i++ {
		pStr += `<span>` + strconv.Itoa(i) + `</span>`
	}
	newsHtml = strings.Join(pages, "") + `<page>` + pStr + `</page>`
}

/*
 * 3.2 顶部导航栏制作
 * 获取config.ini中要显示的分类栏目
 */
func makeNavgition() {
	top := getNavByKey("top")
	if len(top) > 0 {
		tops := strings.Split(top, ",")
		for _, v := range tops {
			navsList = append(navsList, v)
		}
	}
}

/*
 * 3.3 用参数数据生成最终HTML
 */
func writeHTML(elems []HTML) {
	for _, v := range elems {
		v.UI()
		err := ioutil.WriteFile(v.OFile+v.Router, []byte(v.Con), 0666) //写入文件(字节数组)
		if err != nil {
			log("[生成网站文件错误]" + err.Error())
		}
	}
}

/*
 * 3.生成单一HTML文件  主要针对实时编辑
 */
func writeOneHTMLByPath(fn string) {
	for _, v := range htmls {
		if strings.ReplaceAll(v.IFile, "/", "\\") == strings.ReplaceAll(fn, "/", "\\") {
			v.UI()
			log("********************")
			err := ioutil.WriteFile(v.OFile+v.Router, []byte(v.Con), 0666) //写入文件(字节数组)
			if err != nil {
				log("[生成单个网站文件错误]" + err.Error())
			}
		}
	}

}

/*
 * 4. 最终HTML样式相关的静态资源写入页面
 */
func makeStatic(fn string, of string) {
	con, err := ioutil.ReadFile(fn)
	if err != nil {
		log("[读取文件错误]:" + err.Error())
	}
	err = ioutil.WriteFile(of, con, 0666) //写入文件(字节数组)
	if err != nil {
		log("[生成网站文件错误]" + err.Error())
	}
}
